import Vue from 'vue'
import axios from 'axios'
import Qs from 'qs'
import store from '../store'
import router from '../router'
import { Loading } from 'element-ui';
console.log('env',process.env.NODE_ENV);//production  development
//判断本地还是线上
const isServer = process.env.NODE_ENV==='production';
store.commit('SET_ISSERVER',isServer);
// axios配置
// 设置axios请求baseUrl
axios.defaults.withCredentials = true;
// axios.defaults.timeout = 10000;
const origin = window.location.origin;
if(isServer){
	let baseURL = location.origin.replace('cjjadmin','api');
	axios.defaults.baseURL = baseURL;
	store.commit('SET_LOCATION',{
		origin:origin.replace("cjjadmin", "api")
	});
}else{
	store.commit('SET_LOCATION',{
		origin:origin+'/api'
	});
}
/*
* 设置loading  依赖Loading组件
* 在请求发送出去之前，使用show()
* 在请求全部结束后,使用close()
* */
class AppLoading {
	constructor(){
		this.ajaxQueue = 0;
		this.loading;
	}
	show(){
		this.ajaxQueue++;
		this.loading = Loading.service({
			lock: true,
			text: 'Loading',
			spinner: 'el-icon-loading',
			background: 'rgba(0, 0, 0, 0.7)'
		});
	}
	close(){
		this.ajaxQueue--;
		if(this.ajaxQueue===0){
			this.loading.close();
		}
	}
}
var appLoading = new AppLoading();
/*
* 设置拦截器，interceptors请求处理
* 在请求发送出去之前，会进入到这个回调函数
* 在这里，为请求添加上token
* */
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
axios.interceptors.request.use(config => {
	appLoading.show();
    if(config.params){
        // config.params.token = ''
    }else{
        // config.params = {
        //     token: ''
        // }
    }
    //在发送请求之前做某件事
	// config.headers.post['Content-Type'] = 'text/html;charset=UTF-8'
	//form的enctype属性为编码方式，常用有两种：application/x-www-form-urlencoded和multipart/form-data
	// config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
	if(config.method  === 'post' && Object.prototype.toString.call(config.data) !== '[object FormData]'){
		if (config.data && config.data.java_token) {
			config.headers['Authorization'] = config.data.java_token
			config.headers['Content-Type'] = 'application/json'
			config.data = config.data.brandId
			config.withCredentials = false
		} else {
			config.data = Qs.stringify(config.data)
		}
	}
    /* 本地代理需要加/api */
    if(!isServer&&!config.url.includes('http')){
        config.url = '/api'+config.url
	}

    // 需要return config对象
    return config
})

/*
* 设置拦截器，interceptors响应处理，所有axios的请求响应，都会优先回调到拦截器中，
* 在请求得到响应的情况下，进入第一个回调函数
* 在请求发生错误的情况下，进入第二个回调函数
* */
axios.interceptors.response.use(response => {
	isLogin(response)
	appLoading.close();
	// 统一处理数据，只获取所需要的业务数据，舍弃状态码等与业务无关的数据
	//console.log('数据响应',response)
    return response.data
}, err => {
	appLoading.close();
    return Promise.reject(err)
})

function isLogin(config){
	//未登录状态
	let isEmptyObject = (obj) => {
		var name;
		for (name in obj) {
			return false;
		}
		return true;
	}
	let isLogin = !isEmptyObject(store.getters.user_info);
	if(isLogin){
		if(config.data&&config.data.code===10000){
			store.commit("SET_USERINFO", {});
			router.push('./sign-in')
		}
	}

}

/*
* 前后端数据交互尽量单独封装，组件中尽量只处理业务逻辑
* */
// 绑定到Vue原型对象上，在组件中：this.$http => axios
Vue.prototype.$http = axios
export default axios;
